home *** CD-ROM | disk | FTP | other *** search
/ Aminet 20 / Aminet 20 (1997)(GTI - Schatztruhe)[!][Aug 1997].iso / Aminet / comm / misc / net_time.lha / net_time / Net-time.e < prev    next >
Text File  |  1997-06-23  |  11KB  |  374 lines

  1. MODULE  'intuition/intuition',
  2.         'graphics/displayinfo','graphics/text','graphics/rastport','wb',
  3.         'tools/file','dos/datetime','dos/dos','dos/dostags',
  4.         'workbench/workbench','icon','workbench/startup',
  5.         'gadtools','libraries/gadtools'
  6.  
  7. CONST VERSION=37,    /* Minimum V2.0 (of course) */
  8.       WIN_FLAGS   =  WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR
  9.                      WFLG_NOCAREREFRESH OR WFLG_ACTIVATE,
  10.       WIN_FLAGSB  =  WFLG_CLOSEGADGET OR WFLG_DRAGBAR OR
  11.                      WFLG_DEPTHGADGET OR WFLG_NOCAREREFRESH OR WFLG_ACTIVATE,
  12.       WIN_IDCMP   =  IDCMP_REFRESHWINDOW OR IDCMP_GADGETUP OR
  13.                      IDCMP_ACTIVEWINDOW,
  14.       WIN_IDCMPB  =  IDCMP_CLOSEWINDOW OR IDCMP_REFRESHWINDOW OR
  15.                      IDCMP_GADGETUP OR IDCMP_ACTIVEWINDOW,
  16.       GRY=0,BLK=1,WHT=2,BLU=3,   /* WB 2.0 colours */
  17.       RECESSED = 2,
  18.       R=120,
  19.       MAXCOUNT=50    /* # of times to draw shap before changing it */
  20.  
  21. ENUM  NOERROR=NIL,
  22.       NOMEM,
  23.       NOLIBRARY,
  24.       NOKICK,
  25.       NOLOCK,
  26.       NOVISUAL,
  27.       NOWINDOW,
  28.       NOGADGETS,
  29.       NONE,NOCXLIB,BADARGS,NOBROKER,NOPORT,NOICONLIB,NOWBLIB
  30.  
  31. RAISE NOMEM       IF New()=NIL,
  32.       NOLIBRARY   IF OpenLibrary()=NIL,
  33.       NOKICK      IF KickVersion()=NIL,
  34.       NOLOCK      IF LockPubScreen()=NIL,
  35.       NOVISUAL    IF GetVisualInfoA()=NIL,
  36.       NOWINDOW    IF OpenWindow()=NIL,
  37.       NOGADGETS   IF CreateGadgetA()=NIL,
  38.       NOGADGETS   IF CreateContext()=NIL
  39.  
  40. DEF   wnd  :PTR TO window, wndl  :PTR TO window,
  41.       rast :PTR TO rastport,
  42.       scr, visual, context, lastgad,
  43.       thistask, origpri,
  44.       connection,terminal,e,f,h,j,l,m,n,o,p,q,x,y,
  45.       logstr[192] :STRING,lstr[20] :STRING,
  46.       gstr[30] :STRING,month,
  47.       loglist[13]:LIST,
  48.       myport,appitem,appmsg,messagelist    :PTR TO LONG,
  49.      result,
  50.       myargs:PTR TO LONG,do:PTR TO diskobject,
  51.       string[200]:STRING,wbm:PTR TO wbstartup,rg:PTR TO wbarg,
  52.       dir,pname,z[200]:STRING,path[30]:STRING
  53.  
  54.  
  55. ->************************ Main ************************************
  56.  
  57. PROC main() HANDLE
  58.    KickVersion(VERSION)
  59.    workbenchbase:=OpenLibrary('workbench.library',37)
  60.    myport:=CreateMsgPort()
  61.    appitem:=AddAppMenuItemA(0,0,'Net-time',myport,NIL)
  62.    f:=NIL
  63.     myargs:=[0,0,0] -> static array for the arg's
  64.     wbm:=wbmessage
  65.  
  66.     -> open the resources we need...
  67.     IF (workbenchbase:=OpenLibrary('workbench.library',37))=NIL THEN Raise(NOWBLIB)
  68.     IF (iconbase:=OpenLibrary('icon.library',37))=NIL THEN Raise(NOICONLIB)
  69.     
  70.     -> compute program's path and name, i.e. get it from the wbmessage */
  71.     IF wbmessage
  72.         IF wbm.numargs>0
  73.             rg:=wbm.arglist+((wbm.numargs-1)*SIZEOF wbarg)
  74.             dir:=CurrentDir(rg[].lock)
  75.             pname:=rg.name
  76.         ELSE
  77.             pname:='progdir:Net-time'
  78.         ENDIF
  79.     ELSE
  80.         pname:=StringF(string,'progdir:\s',GetProgramName(z,200) BUT z)
  81.     ENDIF
  82.     -> do we have an icon?
  83.     IF do:=GetDiskObject(pname)
  84.         myargs[0]:=FindToolType(do.tooltypes,'W_POSX')
  85.         myargs[1]:=FindToolType(do.tooltypes,'W_POSY')
  86.         myargs[2]:=FindToolType(do.tooltypes,'LOG_PATH')
  87.         IF myargs[0] THEN x:=Val(myargs[0]) ELSE x:=10
  88.         IF myargs[1] THEN y:=Val(myargs[1]) ELSE y:=15
  89.        IF myargs[2] THEN StringF(path,'\sNettimelog',myargs[2])
  90.     ELSE
  91.         f:=1
  92.     ENDIF
  93.  
  94.     l:=1
  95.     wnd:=NIL
  96.     wndl:=NIL
  97.  
  98.     ->Read logfile
  99.     getmonth()
  100.     file()
  101.     gstr:=MidStr(gstr,logstr,(month*8),8)   
  102.     o:=(Val(MidStr(lstr,gstr,1,3)))*3600
  103.     o:=(Val(MidStr(lstr,gstr,4,2)))*60+o
  104.     o:=o+(Val(MidStr(lstr,gstr,6,2)))
  105.     thistask:=FindTask(NIL)
  106.     gadtoolsbase:=OpenLibrary({txt_gadtools},VERSION)
  107.     CreateContext({context})
  108.     lastgad:=context
  109.     origpri:=setpri(-1)
  110.    LOOP
  111. -> ********** Mainloop  ********************************************
  112.        terminal:=And(Char($BFD000),%10000000)
  113.            connection:=And(Char($BFD000),%00100000)
  114.             appmsg:=GetMsg(myport)
  115.             IF appmsg<>0 THEN req()
  116.             IF f THEN Raise(NIL)
  117.  
  118.         -> did the carrier start or stop?
  119.             IF connection=%00100000
  120.             ->  IF terminal=%10000000 
  121.                 CurrentTime({h},{m})
  122.                 n:=h-o ->n=startid-sparadlogtid
  123.                 IF l=0 
  124.                   savelog()
  125.                   l:=1 
  126.                   closewin()
  127.                 ENDIF
  128.             ELSE
  129.                 IF l=1 
  130.                  openwin()
  131.                  l:=0
  132.                 ENDIF
  133.                 CurrentTime({h},{m})
  134.                 IF (o+n)>h THEN n:=h-o ->if the counter resets
  135.                 o:=h-n
  136.  
  137.                 e:=o/3600   ->timmar
  138.                 p:=o-(e*3600)/60     ->minuter
  139.                 q:=o-(p*60)-(e*3600) ->sekunder
  140.                 Colour(1,0) ; SetTopaz(8) 
  141.                 StringF(gstr,'\z\d[3]:\z\d[2]:\z\d[2]',e,p,q)
  142.                 TextF(3,8,'\s',gstr)
  143.             ENDIF          
  144.         -> avoid busy polling
  145.         Delay(5)
  146.    ENDLOOP
  147.  EXCEPT
  148.    IF scr THEN UnlockPubScreen(NIL,NIL)
  149.    IF wnd THEN CloseWindow(wnd)
  150.    IF wndl THEN CloseWindow(wndl)
  151.    IF context THEN FreeGadgets(context)
  152.    IF visual THEN FreeVisualInfo(visual)
  153.    IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  154.    RemoveAppMenuItem(appitem); DeleteMsgPort(myport)
  155. ENDPROC 
  156.  
  157. ->****************************** END ************************************
  158.  
  159. PROC openwin()
  160.  /* open our window.. */
  161.    scr:=LockPubScreen(NIL)
  162.    visual:=GetVisualInfoA(scr,NIL)
  163.    wnd:=OpenWindowTagList(NIL,
  164.    [  WA_FLAGS,WIN_FLAGS,WA_IDCMP,WIN_IDCMP,
  165.       WA_LEFT,x,   WA_TOP,y,
  166.       WA_WIDTH,100,  WA_HEIGHT,12,
  167.       WA_TITLE,'',
  168.       WA_GADGETS,context,NIL,NIL ])
  169.    UnlockPubScreen(NIL,scr)
  170.    scr:=NIL
  171.    rast:=stdrast:=wnd.rport
  172.    SetTopaz(8)
  173.    RefreshGadgets(context,wnd,NIL)
  174.    Gt_RefreshWindow(wnd,NIL)  
  175. ENDPROC
  176.  
  177.  
  178. PROC closewin()
  179.     IF wnd THEN CloseWindow(wnd) 
  180.     wnd:=NIL
  181. ENDPROC
  182.  
  183.  
  184. PROC file() HANDLE -> Checks if logfile exists, if not? oops!
  185.   DEF m,l,n,list
  186.   m,l:=readfile(path)
  187.   n:=countstrings(m,l)
  188.   list:=stringsinfile(m,l,n)
  189.   IF l=96 THEN StrCopy(logstr,m,96) ELSE Raise(NIL) 
  190.   j:=l
  191.  EXCEPT
  192.   makelogfile()
  193.   oops() 
  194. ENDPROC
  195.  
  196.  
  197. PROC oops()
  198.     StringF(gstr,'Make one|Oh-shit!')
  199.     result:=EasyRequestArgs(0,[20,0,0,{txt_req},gstr],0,NIL)
  200.     SELECT result
  201.         CASE 1
  202.            savelog()
  203.           DEFAULT
  204.            f:=1
  205.     ENDSELECT
  206. ENDPROC
  207.  
  208.  
  209. PROC makelogfile() -> Makes a empty logfile 
  210.   DEF i
  211.   FOR i:=1 TO 12
  212.     loglist[i]:=i  
  213.   ENDFOR
  214.   StrCopy(logstr,'',ALL)
  215.   FOR i:=1 TO 12
  216.     StrAdd(logstr,'00000000',ALL)
  217.   ENDFOR
  218. ENDPROC
  219.  
  220.  
  221. PROC savelog() -> update logstr and save it
  222.   DEF i,templogstr[120]:STRING
  223.   StrCopy(templogstr,'',ALL)
  224.     FOR i:=0 TO 11
  225.       IF i<>month
  226.         gstr:=MidStr(gstr,logstr,i*8,8)
  227.         StrAdd(templogstr,gstr,ALL)
  228.       ELSE
  229.         StringF(gstr,'\z\d[8]',q+(p*100)+(e*10000))
  230.         StrAdd(templogstr,gstr,ALL)
  231.       ENDIF
  232.     ENDFOR
  233.   StrCopy(logstr,templogstr,ALL)
  234.   writefile(path,logstr,96)
  235. ENDPROC
  236.  
  237.  
  238.  
  239. PROC getmonth() ->Calculates year,day of year,month 
  240.   DEF dt:datetime,ds:PTR TO datestamp,yr,sch,days,syr,da,
  241.       list:PTR TO LONG
  242.   list:=[31,28,31,30,31,30,31,31,30,31,30,31]
  243.   yr:=78
  244.   sch:=-1
  245.   syr:=2
  246.   da:=0
  247.   ds:=DateStamp(dt.stamp)
  248.   WHILE ds.days>sch
  249.     sch:=sch+365
  250.     IF ds.days>sch THEN yr:=yr+1
  251.     IF syr=4 AND ds.days>sch THEN sch:=sch+1
  252.     syr:=syr+1
  253.     IF syr=5 THEN syr:=1
  254.   ENDWHILE
  255.   days:=ds.days-(sch-365)
  256.   month:=1
  257.   IF syr=1 THEN list[2]:=29
  258.   WHILE days>(da+list[month])
  259.      month:=month+1 
  260.     da:=da+list[month-2]
  261.   ENDWHILE
  262.  month:=month-1
  263. ENDPROC
  264.  
  265.  
  266. PROC printlog() ->Opens a window and prints the logfile
  267.  DEF i,tstr[20]:STRING
  268.  wndl:=OpenWindowTagList(NIL,
  269.        [  WA_FLAGS,WIN_FLAGSB,WA_IDCMP,WIN_IDCMPB,
  270.        WA_LEFT,230,   WA_TOP,40,
  271.        WA_WIDTH,150,  WA_HEIGHT,200,
  272.        WA_TITLE,'Net-time log',
  273.        WA_GADGETS,context,NIL,NIL ])
  274.   ActivateWindow(wndl)
  275.   Gt_RefreshWindow(wndl,NIL)
  276.   rast:=stdrast:=wndl.rport
  277.   Colour(1,0) ; SetTopaz(8) 
  278.   messagelist:=[    'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
  279.                     'Oct','Nov','Dec'    ]
  280.   FOR i:=0 TO 11
  281.     IF month=i THEN StrCopy(tstr,'->',ALL) ELSE StrCopy(tstr,'  ',ALL)
  282.     gstr:=MidStr(gstr,logstr,i*8+1,3)
  283.     StrAdd(tstr,gstr,ALL);StrAdd(tstr,':')
  284.     gstr:=MidStr(gstr,logstr,i*8+4,2)
  285.     StrAdd(tstr,gstr,ALL);StrAdd(tstr,':')
  286.     gstr:=MidStr(gstr,logstr,i*8+6,2)
  287.     StrAdd(tstr,gstr,ALL)
  288.     TextF(10,12*i+32,'\s \s ',messagelist[i],tstr)
  289.   ENDFOR
  290.   WHILE WaitIMessage(wndl)<>IDCMP_CLOSEWINDOW
  291.   ENDWHILE
  292.   CloseWindow(wndl)
  293.   wndl:=NIL
  294.   IF wnd<>NIL THEN rast:=stdrast:=wnd.rport
  295. ENDPROC
  296.  
  297. PROC req()
  298.     StringF(gstr,'Loglist|About|Terminate')
  299.     result:=EasyRequestArgs(0,[20,0,0,{txt_about},gstr],0,NIL)
  300.     SELECT result
  301.         CASE 1
  302.            printlog()
  303.         CASE 2
  304.            about() 
  305.           DEFAULT
  306.             f:=1
  307.     ENDSELECT
  308. ENDPROC
  309.  
  310. PROC about()
  311.     DEF result,gstr[30]:STRING
  312.     StringF(gstr,'SKIP this!')
  313.     result:=EasyRequestArgs(0,[20,0,0,{txt_more},gstr],0,NIL)
  314. ENDPROC
  315.  
  316. -> ++++++++++++++++++++ END OF MY PROC'S  +++++++++++++++++++++++++++++++++
  317. PROC setpri(pri)
  318. ENDPROC SetTaskPri(thistask,pri)
  319.  
  320.  
  321.  
  322. txt_gadtools:
  323.  
  324. CHAR 'gadtools.library',0
  325.  
  326. txt_about:
  327.  
  328. CHAR    '           Net-time\n\n',
  329.         '© COPYRIGHT 1997 Sören Forsberg\n\n',
  330.         'Written in AmigaE\n\n',
  331.           'E-mailware\n',
  332.           'sorenf@hem1.passagen.se\n',0
  333. txt_req:
  334.  
  335. CHAR '    Net-time logfile damaged or missing     ',0
  336.  
  337. txt_more:
  338.  
  339. CHAR 'Net-time V1.0  Copyright Sören Forsberg 97\n',
  340.  
  341.      'This is a WB2+ onlinetime-log,timer program.\n',
  342.      'It shows your TOTAL onlinetime for the current month.\n',
  343.      '\qNO NEED TO CHECK A LOGFILE EVER AGAIN\q\n',
  344.      'It was written in AmigaE because\n',
  345.      'amos sucks and blitzbasic gurus.\n\n',
  346.  
  347.      'Installation?\n',
  348.      'Easy just drop it in your WBStartup drawer.\n',
  349.  
  350.      'Usage?\n',
  351.      'If you want to see the log, you will find net-time\n',
  352.      'in the tools-menu. There are 3 tooltypes to edit to\n',
  353.      'your liking.\n',
  354.      'Bugs? Probably,use at own risk.(works fine for me :))\n',
  355.  
  356.      'Quirks?\n',
  357.      'As the program checks the carrierdetect-signal (CD)\n',
  358.      'to determine wether you are online or not it will \n',
  359.      'miss 1-10 seconds every login.\n',
  360.      '    (But i belive all programs of this kind do?)\n',
  361.  
  362.      'Status?\n',
  363.      'Emailware (If it stuck in your wbstartup).\n',
  364.      'Bugreports welcome.\n\n',
  365.  
  366.      'E-Mail    : sorenf@hem1.passagen.se\n',
  367.      'Irc       : soren\n',
  368.      'Home-page : www.hem1.passagen.se\\sorenf\\index.html\n',0
  369. /*
  370. to do:
  371. rätt tid vid månadsbyte+online
  372. optimera (delay)
  373. om DTR "Ditt modem är redan på ,forsätta iallafall?eller editera loggfilen
  374. */